<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>魔术函数 __sleep 和 __wakeup</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="oop4.serialization.html">序列化对象 － 会话中的对象</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="oop4.newref.html">构造函数中的引用</a></div>
 <div class="up"><a href="oop4.html">类与对象（PHP 4）</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="oop4.magic-functions" class="sect1">
  <h2 class="title">魔术函数 <em>__sleep</em> 和 <em>__wakeup</em></h2>

  <p class="para">
   <span class="function"><a href="function.serialize.html" class="function">serialize()</a></span> 检查类中是否有魔术名称
   <em>__sleep</em>
   的函数。如果这样，该函数将在任何序列化之前运行。它可以清除对象并应该返回一个包含有该对象中应被序列化的所有变量名的数组。如果该函数没有返回什么数据，则不会有什么数据被序列化，并且会发出一个 E_NOTICE 错误。
  </p>

  <p class="para">
   使用 <em>__sleep</em>
   的目的是提交等待中的数据或进行类似的清除任务。此外，如果有非常大的对象而并不需要完全储存下来时此函数也很有用。
  </p>

  <p class="para">
   相反地，<span class="function"><a href="function.unserialize.html" class="function">unserialize()</a></span>
   检查具有魔术名称
   <em>__wakeup</em>
   的函数的存在。如果存在，此函数可以重建对象可能具有的任何资源。
  </p>

  <p class="para">
    使用 <em>__wakeup</em>
    的目的是重建在序列化中可能丢失的任何数据库连接以及处理其它重新初始化的任务。
  </p>
 </div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="oop4.serialization.html">序列化对象 － 会话中的对象</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="oop4.newref.html">构造函数中的引用</a></div>
 <div class="up"><a href="oop4.html">类与对象（PHP 4）</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
